<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // Object.is()从应用功能上描述和====功能一致的，仅在+0和-0，NaN和NaN比较存在差异
        console.log(NaN===NaN);//false
        console.log(+0===-0);//true
        var a=NaN;
        var b=NaN;
        console.log(Object.is(a,b));//true
        console.log(Object.is(+0,-0));//false

        // Object.assign(target,source.......)
        // 该方法用于将对象中所有可循环的属性，从一个或者多个对象复制到新的对象中
        // target描述承载复制结果的新对象，目标对象中的属性会被后续的对象中相同的属性覆盖
        // source指定待复制的对象列表，如果完成多个对象的合并，后续对象中的属性会覆盖前面对象中相同的属性
        var obj1={
            a:1001,
            b:2000
        };
        var obj2={
            username:"alice",
            age:30,
            arr:["a","b","c","d"]
        };
        var obj3={
            sex:"男",
            height:178,
            a:"haha"
        };
        Object.assign(obj1,obj2,obj3);//实现的是浅拷贝
        obj2.arr[2]="hello";
        console.log(obj1);

        // Object.keys()获取指定对象中所有可循环的属性，并返回构成属性名的列表
        // Object.values()获取指定对象中所有可循环的属性值，并返回构成属性值的列表
        // Object.entries()获取指定对象中所有可循环的属性名和属性值，并返回构成属性名和值的列表[[属性名,属性值]]
        // Object.fromEntries()将对象的构成列表转换成js的标准对象结构

        var objs={
            username:"tony",
            age:20,
            sex:"男"
        };
        console.log(Object.keys(objs));//数组
        console.log(Object.values(objs));//数组
        var objsArr=Object.entries(objs);//二维数组
        var newObj=Object.fromEntries(objsArr);//将属性名和值的列表（二维数组）转换成js的标准对象
        console.log(newObj);
    </script>
</head>
<body>
    
</body>
</html>